/**
 * FileContentManager is a Java based file manager desktop application, it can
 * show, edit and manipulate the content of the files archived inside a zip.
 * 
 * Copyright (C) 2007
 * 
 * Created by Camila Sanchez [http://mimix.wordpress.com/], Rafael Naufal
 * [http://rnaufal.livejournal.com] and Rodrigo [rdomartins@gmail.com]
 * 
 * FileContentManager is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as published by the
 * Free Software Foundation; either version 2.1 of the License, or (at your
 * option) any later version.
 * 
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with FileContentManager; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */
package br.com.jteam.jfcm.gui.tree;

import java.awt.Component;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;

import br.com.jteam.jfcm.model.FileType;

/**
 * 
 * Renderiza itens do tipo ZipData de uma ZipTree, de acordo com o tipo (em
 * geral, determinado pela extens&atilde;o do arquivo).
 * 
 * @see br.com.jteam.jfcm.gui.tree.ZipData
 * @see br.com.jteam.jfcm.gui.tree.ZipTree
 * 
 */
class ZipDataRenderer extends DefaultTreeCellRenderer
{
	private static final String BLANK_ICON = "blank";

	private static final String FOLDER_ICON = "folder";

	private static final String TEXT_ICON = "txt";

	private static final String IMAGE_ICON = "img";

	@Override
	public Component getTreeCellRendererComponent(	JTree tree,
													Object value,
													boolean sel,
													boolean expanded,
													boolean leaf,
													int row,
													boolean hasFocus)
	{
		super.getTreeCellRendererComponent(	tree,
											value,
											sel,
											expanded,
											leaf,
											row,
											hasFocus);
		ZipData zipData = ((ZipDataNode) value).getUserObject();
		setIcon(getIconFile(zipData));
		return this;
	}

	private Icon getIconFile(ZipData data)
	{
		if (data.isFolder())
		{
			return new ImageIcon(getResource(FOLDER_ICON));
		} else if (isImage(data.getName()))
		{
			return new ImageIcon(getResource(IMAGE_ICON));
		} else if (isText(data.getName()))
		{
			return new ImageIcon(getResource(TEXT_ICON));
		} else
		{
			return new ImageIcon(getResource(BLANK_ICON));
		}
	}

	private boolean isImage(String fileName)
	{
		FileType fileType = FileType.getFileTypeByFileName(fileName);
		return fileType == FileType.GIF || fileType == FileType.JPG
						|| fileType == FileType.PNG;
	}

	private boolean isText(String fileName)
	{
		FileType fileType = FileType.getFileTypeByFileName(fileName);
		return fileType == FileType.TEXT;
	}

	private URL getResource(String fileType)
	{
		return getClass().getResource("/images/tree/" + fileType + ".png");
	}
}
